package com.tssup.fesco.common.utils;

import java.io.BufferedOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

import com.tssup.fesco.common.oss.object.PutObject;
import com.tssup.fesco.common.vo.FileVo;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;

/**
 * 文件上传
 *
 * @author shuchang.liao
 * @create 2017-03-20 10:50
 */
@Component
public class FileUploadUtil {
    private static final Log logger = LogFactory.getLog(FileUploadUtil.class);

    @Autowired
    private PutObject putObject;

    @Value("${aliyun.oss.bucket}")
    private String bucket;

    ///**
    // * 单文件上传
    // * @param file  文件
    // * @param picUrl 文件路径前缀 http://outertest.tssup.com:8086/
    // * @param filePath 文件上传指定目录 //app//sales_platform//images//
    // * @param getFilePath 获取文件指定目录 //images//
    // * @param savePath 文件夹 goods//
    // * @param fileName 文件名 aa.jpg
    // * @return
    // */
    //public static FileVo uploadFile(MultipartFile file,String picUrl,String filePath,String getFilePath, String savePath, String fileName) {
    //    FileVo fileVo=new FileVo();
    //    fileVo.setStatus(1);
    //    fileVo.setMsg("上传成功");
    //    if (file.isEmpty()) {
    //        fileVo.setStatus(0);
    //        fileVo.setMsg("文件为空");
    //        return fileVo;
    //    }
    //    // 获取文件名
    //    fileName = file.getOriginalFilename();
    //    fileVo.setOriName(fileName);
    //    logger.info("上传的文件名为：" + fileName);
    //    // 获取文件的后缀名
    //    String suffixName = fileName.substring(fileName.lastIndexOf("."));
    //    logger.info("上传的后缀名为：" + suffixName);
    //    // 文件上传后的路径
    //    //String filePath = "c://test//";
    //    // 解决中文问题，liunx下中文路径，图片显示问题
    //    fileName = UUID.randomUUID() + suffixName;
    //    File dest = new File(filePath+ savePath+ fileName);
    //    // 检测是否存在目录
    //    if (!dest.getParentFile().exists()) {
    //        dest.getParentFile().mkdirs();
    //    }
    //    try {
    //        file.transferTo(dest);
    //        fileVo.setFileName(getFilePath+savePath+fileName);
    //        fileVo.setFilePath(picUrl+getFilePath+savePath+fileName);
    //
    //    } catch (Exception e) {
    //        e.printStackTrace();
    //        fileVo.setStatus(Integer.valueOf(0));
    //        fileVo.setMsg("上传失败");
    //    }
    //    return fileVo;
    //}
    //
    //
    ///**
    // *
    // * oss文件批量上传
    // * @param files  多个文件
    // * @param picUrl 文件路径前缀 http://outertest.tssup.com:8086/
    // * @param filePath 文件上传指定目录 //app//sales_platform//images//
    // * @param getFilePath 获取文件指定目录 //images//
    // * @param savePath 文件夹 goods//
    // * @return
    // */
    //public static List<FileVo> batchUploadFile(List<MultipartFile> files,String picUrl,String filePath,String getFilePath, String savePath) {
    //    List<FileVo> fileVos=new ArrayList<FileVo>();
    //    BufferedOutputStream stream = null;
    //    for (int i = 0; i < files.size(); ++i) {
    //        FileVo fileVo=new FileVo();
    //        fileVo.setStatus(1);
    //        fileVo.setMsg("上传成功");
    //        MultipartFile file = files.get(i);
    //        if (file.isEmpty()) {
    //            fileVo.setStatus(0);
    //            fileVo.setMsg("文件为空");
    //            fileVos.add(fileVo);
    //        }else if (!file.isEmpty()) {
    //            // 获取文件名
    //            String  fileName = file.getOriginalFilename();
    //            fileVo.setOriName(fileName);
    //            logger.info("批量上传的第"+(i+1)+"文件名为：" + fileName);
    //            // 获取文件的后缀名
    //            String suffixName = fileName.substring(fileName.lastIndexOf("."));
    //            logger.info("批量上传的第"+(i+1)+"个文件后缀名为：" + suffixName);
    //            // 文件上传后的路径
    //            //String filePath = "c://test//";
    //            // 解决中文问题，liunx下中文路径，图片显示问题
    //            fileName = UUID.randomUUID() + suffixName;
    //            File dest = new File(filePath+ savePath+ fileName);
    //            // 检测是否存在目录
    //            if (!dest.getParentFile().exists()) {
    //                dest.getParentFile().mkdirs();
    //            }
    //            try {
    //                file.transferTo(dest);
    //
    //                fileVo.setFileName(getFilePath+savePath+fileName);
    //                fileVo.setFilePath(picUrl+getFilePath+savePath+fileName);
    //                fileVos.add(fileVo);
    //            } catch (IllegalStateException e) {
    //                e.printStackTrace();
    //            } catch (IOException e) {
    //                e.printStackTrace();
    //            }
    //        }
    //    }
    //    return fileVos;
    //}


    /**
     * oss单文件上传
     * @param file  文件
     * @param savePath 文件夹 ue//
     * @return
     */
    public FileVo ossUploadFile(MultipartFile file, String savePath) {
        FileVo fileVo=new FileVo();
        fileVo.setStatus(1);
        fileVo.setMsg("上传成功");
        if (file.isEmpty()) {
            fileVo.setStatus(0);
            fileVo.setMsg("文件为空");
            return fileVo;
        }
        // 获取文件名
        String fileName = file.getOriginalFilename();
        fileVo.setOriName(fileName);
        logger.info("上传的文件名为：" + fileName);
        // 获取文件的后缀名
        String suffixName = fileName.substring(fileName.lastIndexOf("."));
        logger.info("上传的后缀名为：" + suffixName);
        // 文件上传后的路径
        //String filePath = "c://test//";
        // 解决中文问题，liunx下中文路径，图片显示问题
        fileName = UUID.randomUUID() + suffixName;
        try {
            String url = putObject.putStream(bucket,savePath+fileName,file.getInputStream());
            fileVo.setFileName(savePath+fileName);
            fileVo.setFilePath(url);
        } catch (IOException e) {
            e.printStackTrace();
            fileVo.setStatus(Integer.valueOf(0));
            fileVo.setMsg("上传失败");
        }
        return fileVo;
    }

    /**
     *
     * 文件批量上传
     * @param files  多个文件
     * @param savePath 文件夹 goods//
     * @return
     */
    public List<FileVo> ossBatchUploadFile(List<MultipartFile> files,String savePath) {
        List<FileVo> fileVos=new ArrayList<FileVo>();
        BufferedOutputStream stream = null;
        for (int i = 0; i < files.size(); ++i) {
            FileVo fileVo=new FileVo();
            fileVo.setStatus(1);
            fileVo.setMsg("上传成功");
            MultipartFile file = files.get(i);
            if (file.isEmpty()) {
                fileVo.setStatus(0);
                fileVo.setMsg("文件为空");
                fileVos.add(fileVo);
            }else if (!file.isEmpty()) {
                // 获取文件名
                String  fileName = file.getOriginalFilename();
                fileVo.setOriName(fileName);
                logger.info("批量上传的第"+(i+1)+"文件名为：" + fileName);
                // 获取文件的后缀名
                String suffixName = fileName.substring(fileName.lastIndexOf("."));
                logger.info("批量上传的第"+(i+1)+"个文件后缀名为：" + suffixName);
                // 文件上传后的路径
                //String filePath = "c://test//";
                // 解决中文问题，liunx下中文路径，图片显示问题
                fileName = UUID.randomUUID() + suffixName;
                try {
                    String url = putObject.putStream(bucket,savePath+fileName,file.getInputStream());
                    fileVo.setFileName(savePath+fileName);
                    fileVo.setFilePath(url);
                    fileVos.add(fileVo);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return fileVos;
    }


}